/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.isd.global.web;

import com.isd.global.modelo.CorreoElectronico;
import com.isd.global.modelo.Parametro;
import com.isd.global.rn.ParametrosRN;
import com.isd.global.util.JsfUtil;
import com.isd.global.util.SenderEmail;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.mail.internet.InternetAddress;
import org.primefaces.event.FileUploadEvent;

/**
 *
 * @author mbascolo
 */
@ManagedBean(name = "formaParteBean")
@ViewScoped
public class FormaParteBean implements Serializable{
    
    @EJB private ParametrosRN parametroRN;    
    @EJB private MailFactory mailFactoryBean;
        
    private String nombre;
    private String cuit;
    private String direccion;
    private String ciudad;
    private String provincia;
    private String telefono;
    private String celular;
    private String email;
    private String asunto;
    private String mensaje;
    
    private Parametro p;    
    private String pathAdjunto;
    private boolean tieneArchivoAdjunto;

    public String getMensaje() {
        return mensaje;
    }

    public void setMensaje(String mensaje) {
        this.mensaje = mensaje;
    }
    
    /**
     * Creates a new instance of FormaParteBean
     */
    public FormaParteBean() {              
        
    }
    
    @PostConstruct
    private void init(){

        try {
            p = parametroRN.getParametros();            
        } catch (Exception e) {            
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "init", e);            
        }
    }
        
    public void enviarNotificaciones(){
        
        List<CorreoElectronico> correos = new ArrayList<CorreoElectronico>();

        correos.add(generarCorreoElectronicoEmpresa());
        correos.add(generarCorreoElectronicoCliente());        
        //Enviamos los correos con un nuevo hilo...
        SenderEmail se = new SenderEmail(mailFactoryBean, correos);
        se.start();
        reset();
        JsfUtil.addInfoMessage("Muchas gracias por su tiempo","Evaluaremos tu perfil y nos contactaremos contigo");
    }     

    public CorreoElectronico generarCorreoElectronicoCliente(){

        List<String> contenido = new ArrayList<String>();
        contenido.add("Estimado "+ nombre);
        contenido.add("¡Muchas gracias por tu tiempo!");
        contenido.add("Evaluaremos tu perfil y nos contactaremos contigo");
        contenido.add("");
        contenido.add("Área de Gestión del Talento Humano Intercap S.R.L.");        
        
        return new CorreoElectronico("Hemos recibido tu perfil laboral", email, mailFactoryBean.generarMensaje("Perfil laboral",contenido));
    }

    public CorreoElectronico generarCorreoElectronicoEmpresa() {
        
        try {
            Parametro p = new Parametro();
            try {
                p = parametroRN.getParametros();
            } catch (Exception ex) {
                
                return null;
            }           
            List<String> contenido = new ArrayList<String>();
            
            contenido.add("Una persona ha ingresado su perfil laboral en la tienda virtual");

            contenido.add("Contacto: " + nombre);
            contenido.add("C.U.I.L." + cuit);
            contenido.add("Provincia: " + provincia);
            contenido.add("Ciudad: " + ciudad);
            contenido.add("Dirección: " + direccion);
                        
            contenido.add("Telefono: " + telefono);
            contenido.add("Celular: " + celular);
            contenido.add("Email: " + email);           
            
            contenido.add("Nota de presentación:");           
            contenido.add("-----------------------------------------------------");           
            contenido.add(mensaje);
            contenido.add("");           
            
            contenido.add("La persona ha adjuntado su curriculum");           
              
        
            InternetAddress dirFrom = new InternetAddress(email, nombre);            
            return new CorreoElectronico(dirFrom
                    , "Nuevo perfil laboral ingresado"
                    , "agustina@intercap.com.ar"
                    , mailFactoryBean.generarMensaje("Nuevo perfil laboral",contenido)
                    , pathAdjunto);
            
        } catch (UnsupportedEncodingException unsupportedEncodingException) {

            JsfUtil.addErrorMessage(unsupportedEncodingException.getMessage());
            return null;
        }    
    }
    
    /**
     * Método para limpiar los atributos del managed bean.
     */
    public void reset(){
        
    }
    
    public void uploadEvent(FileUploadEvent event) {  
        
        // Do what you want with the file        
        try {

            copyFile(event.getFile().getFileName(),event.getFile().getInputstream() );  
            JsfUtil.addInfoMessage("Su CV se ha adjuntado correctamente");
            
        } catch (IOException e) {
            e.printStackTrace();
            JsfUtil.addInfoMessage("Error al subir archivo");
        }
    }  
    
    public void copyFile(String fileName, InputStream in) {
           
        try {
                              
           File adjunto = new File(p.getPathUpload()+"/"+fileName);
           
           pathAdjunto = adjunto.getAbsolutePath();
            //write the inputStream to a FileOutputStream
           OutputStream out = new FileOutputStream(adjunto);

           int read = 0;
           byte[] bytes = new byte[1024];

           while ((read = in.read(bytes)) != -1) {
               out.write(bytes, 0, read);
           }

           in.close();
           out.flush();
           out.close();
           
           tieneArchivoAdjunto = true;
           
       } catch (IOException e) {
          Logger.getLogger(getClass().getName()).log(Level.SEVERE, "copyFile", e);            
       }
    }
    
    
    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getCuit() {
        return cuit;
    }

    public void setCuit(String cuit) {
        this.cuit = cuit;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getCiudad() {
        return ciudad;
    }

    public void setCiudad(String ciudad) {
        this.ciudad = ciudad;
    }

    public String getProvincia() {
        return provincia;
    }

    public void setProvincia(String provincia) {
        this.provincia = provincia;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public String getCelular() {
        return celular;
    }

    public void setCelular(String celular) {
        this.celular = celular;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAsunto() {
        return asunto;
    }

    public void setAsunto(String asunto) {
        this.asunto = asunto;
    }

    public String getPathAdjunto() {
        return pathAdjunto;
    }

    public void setPathAdjunto(String pathAdjunto) {
        this.pathAdjunto = pathAdjunto;
    }

    public boolean isTieneArchivoAdjunto() {
        return tieneArchivoAdjunto;
    }

    public void setTieneArchivoAdjunto(boolean tieneArchivoAdjunto) {
        this.tieneArchivoAdjunto = tieneArchivoAdjunto;
    }
    
}